package com.rimuru.datastructure.deque;

/**
 * 双端队列接口
 * @param <E> 队列中元素类型
 */
public interface Deque<E> {

    /**
     * 向双端队列的前端添加一个元素。
     * 如果当前队列未满，则添加成功返回true；否则返回false。
     *
     * @param e 要添加的元素
     * @return 如果成功添加则返回true，否则返回false
     */
    boolean offerFirst(E e);

    /**
     * 向双端队列的后端添加一个元素。
     * 如果当前队列未满，则添加成功返回true；否则返回false。
     *
     * @param e 要添加的元素
     * @return 如果成功添加则返回true，否则返回false
     */
    boolean offerLast(E e);

    /**
     * 从双端队列的前端移除并返回一个元素。
     * 如果队列为空，则返回null。
     *
     * @return 返回从前端移除的元素，如果队列为空则返回null
     */
    E pollFirst();

    /**
     * 从双端队列的后端移除并返回一个元素。
     * 如果队列为空，则返回null。
     *
     * @return 返回从后端移除的元素，如果队列为空则返回null
     */
    E pollLast();

    /**
     * 查看双端队列前端的元素，但不移除它。
     * 如果队列为空，则返回null。
     *
     * @return 返回前端的元素，如果队列为空则返回null
     */
    E peekFirst();

    /**
     * 查看双端队列后端的元素，但不移除它。
     * 如果队列为空，则返回null。
     *
     * @return 返回后端的元素，如果队列为空则返回null
     */
    E peekLast();

    /**
     * 判断双端队列是否为空。
     *
     * @return 如果队列为空则返回true，否则返回false
     */
    boolean isEmpty();

    /**
     * 判断双端队列是否已满。
     *
     * @return 如果队列已满则返回true，否则返回false
     */
    boolean isFull();
}
